home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1997-10-26 | 4.8 KB | 145 lines |
- (*----------------------------------------------------------------------*
- * *
- * MAGIC Modula's All purpose GEM Interface Cadre *
- * ÿ ÿ ÿ ÿ ÿ *
- *----------------------------------------------------------------------*
- * Version 3.30 02.02.1992 (C)90/91/92 by Peter Hellinger Software *
- *----------------------------------------------------------------------*
- * Dieses Modul ist urheberrechtlich geschtzt. *
- * *
- * Die Verffentlichung des Quelltextes oder Teilen daraus in schrift- *
- * licher Form, insbesondere in Zeitschriften, sowie die Verbreitung *
- * ber Public-Domain-Hndler bedarf der ausdrcklichen schriftlichen *
- * Genehmigung des Autors! *
- * *
- * Der Autor gibt hiermit die ausdrckliche Erlaubnis, das Modul jeder- *
- * zeit auch im Quelltext weiterzugegeben, sofern dessen Text und ins- *
- * besondere dieser Urheberrechts-Vermerk nicht verndert wird, und *
- * durch die Weitergabe kein finanzieller Nutzen entsteht. Der Autor *
- * behlt sich das Recht vor, diese Erlaubnis jederzeit u. ohne Angaben *
- * von Grnden zu widerrufen. *
- *----------------------------------------------------------------------*)
-
- IMPLEMENTATION MODULE mtRandom;
-
- (*----------------------------------------------------------------------*
- * Int. Vers | Datum | Name | nderung *
- *-----------+----------+------+----------------------------------------*
- * 3.00 | 18.01.92 | Hp | *
- *-----------+----------+------+----------------------------------------*)
-
-
-
- (* IMPLEMENTATION FR >>> Megamax-Modula-2 <<< *)
- (* *)
- (*$R- Range-Checks *)
- (*$S- Stack-Check *)
- (* *)
- (*----------------------------------------------*)
-
-
-
-
-
-
- FROM MagicSys IMPORT Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6,
- Bit7, Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14,
- Bit15, LOC, Byte, ByteSet, sWORD, sINTEGER, sCARDINAL,
- sBITSET, lINTEGER, lCARDINAL, lWORD, lBITSET,
- CastToChar, CastToByte, CastToByteset, CastToInt,
- CastToCard, CastToBitset, CastToWord, CastToLInt,
- CastToLCard, CastToLBitset, CastToLWord, CastToAddr,
- TosVersion, Accessory, Basepage, SysHeader, TosDate;
-
-
-
-
-
-
- IMPORT MagicDOS, mtTime;
-
- CONST C = 54;
-
- VAR a: ARRAY [0..C] OF lCARDINAL;
- j, k: [0..C];
-
-
- PROCEDURE Next (): lCARDINAL;
- BEGIN
- a[k]:= a[k] + a[j];
- IF k = 0 THEN k:= C; ELSE DEC (k); END;
- IF j = 0 THEN j:= C; ELSE DEC (j); END;
- RETURN a[k];
- END Next;
-
- PROCEDURE RandomInit (initial: sCARDINAL);
- VAR i: sCARDINAL;
- d: lCARDINAL;
- BEGIN
- j:= 24; k:= 0;
- FOR i:= 0 TO C DO a[i]:= 0; END;
- a[k]:= LONG (31415 + initial);
- IF a[k] = 0 THEN a[k]:= 31415; END;
- FOR i:= 0 TO 1999 DO d:= Next (); END;
- END RandomInit;
-
- PROCEDURE Randomize;
- VAR time, h, m, s, i, j: sCARDINAL;
- l: lCARDINAL;
- BEGIN
- time:= MagicDOS.Tgettime ();
- mtTime.DecodeTime (time, h, m, s);
- RandomInit (s);
- j:= m * s;
- FOR i:= 0 TO j DO l:= Next (); END;
- END Randomize;
-
- PROCEDURE RndLCard (max: lCARDINAL): lCARDINAL;
- BEGIN
- IF max = 0 THEN
- RETURN Next();
- ELSE
- RETURN TRUNC (FLOAT (max) * FLOAT (Next()) / FLOAT (MAX(lCARDINAL)));
- END;
- END RndLCard;
-
- PROCEDURE RndCard (max: sCARDINAL): sCARDINAL;
- BEGIN
- RETURN SHORT (RndLCard (LONG(max)));
- END RndCard;
-
- PROCEDURE RndInt (max: sINTEGER): sINTEGER;
- BEGIN
- RETURN SHORT (RndLInt (LONG(max)));
- END RndInt;
-
- PROCEDURE RndLInt (max: lINTEGER): lINTEGER;
- VAR l: lCARDINAL;
- BEGIN
- IF max = 0 THEN l:= RndLCard (MAX (lINTEGER));
- ELSE l:= RndLCard (ABS (max));
- END;
- RETURN ABS (CastToLInt (l));
- END RndLInt;
-
- PROCEDURE RndReal (): REAL;
- BEGIN
- RETURN FLOAT (RndCard (10000)) * 1.0E-16 +
- FLOAT (RndCard (10000)) * 1.0E-12 +
- FLOAT (RndCard (10000)) * 1.0E-08 +
- FLOAT (RndCard (10000)) * 1.0E-04;
- END RndReal;
-
- PROCEDURE RndLReal (): LONGREAL;
- BEGIN
- RETURN FLOAT (RndCard (10000)) * 1.0E-16 +
- FLOAT (RndCard (10000)) * 1.0E-12 +
- FLOAT (RndCard (10000)) * 1.0E-08 +
- FLOAT (RndCard (10000)) * 1.0E-04;
- END RndLReal;
-
- BEGIN
- Randomize;
- END mtRandom.
-
-